package com.wyl.niupi.framework.vo;

import lombok.Data;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Vo对象，假如entity为Goods(Double price)，map为("price", "***")。则序列化的时候优先会取map中的值，即map可以覆盖entity属性的值。
 * @author 吴宇亮 on 2020/6/4 0004 下午 5:16
 */
@Data
public class Vo<Entity> {

    public Vo(Entity entity){
        this.entity = entity;
        this.map = new HashMap<>();
    }

    private Entity entity;
    private Map<String, Object> map;

    /**
     * 将Entity转换成Vo
     */
    public static <Entity> Vo<Entity> get(Entity entity) {
        return new Vo(entity);
    }

    /**
     * 将list《Entity》转换成list《Vo》
     */
    public static <Entity> List<Vo<Entity>> list(List<Entity> records) {
        List<Vo<Entity>> list = new ArrayList<>(records.size());
        records.forEach(item -> list.add(new Vo(item)));
        return list;
    }

    public void put(String key, Object val){
        map.put(key, val);
    }


}
